/**
 * 读取某个页面
 * getContentAfterAWhile
 */

const puppeteer = require('puppeteer-core')
const findChrome = require('./node_modules/carlo/lib/find_chrome')

/**
 * 启动环境
 */

let browser = null
let current_page = null

/**
 * 获得浏览器实例
 * @returns promise Browser实例
 */
async function getBrowser() {
  if (browser) return browser
  let findChromePath = await findChrome({})
  let executablePath = findChromePath.executablePath
  console.log(executablePath)
  return await puppeteer.launch({
    executablePath,
    headless: false,
  })
}

/**
 * 获得page页面
 * @param {urlStr} startUrl
 */
async function getPage() {
  // 看数据是否存在，如果不存在就进行初始化
  if (!current_page) {
    browser = await getBrowser()
    let page = await browser.newPage()
    current_page = page
  }
}

/**
 * 延迟几秒后，再读取网页内容(默认5秒)
 * @param {string} url 需要读取的地址
 * @param {number} howlong 延迟读取的时间
 * @returns promise
 */
async function getContentAfterAWhile(url, howlong = 5000) {
  // 初始化page
  if (!current_page) await getPage()
  // 读取页面
  await current_page.goto(url)
  return new Promise((resolve, reject) => {
    try {
      //   等待5秒读取页面并解析
      setTimeout(() => {
        current_page.content().then((data) => {
          resolve(data)
        })
      }, howlong)
    } catch (error) {
      //   告诉上层文件错误信息
      reject(error)
    }
  })
}

function closeAll() {
  if (browser) browser.close()
}

module.exports = { readHTML: getContentAfterAWhile, closeAll }
